package com.wangzh.data.arithmetic.recursion.stack;

/**
 * 都是线性结构
 * 数组   任意位置操作
 * 链表  任意位置操作
 * 队列  两端操作，尾部添加，头部删除
 * 栈   一端操作，栈顶操作
 * @param <E>
 */
public interface Stack<E> {

    /**
     * 向栈顶压入元素
     * @param value -待压入值
     * @return 压入成功返回true，否则返回false
     */
    boolean push(E value);

    /**
     * 从栈顶弹出元素
     *
     * @return 栈非空返回栈顶元素，栈为空返回null
     */
    E pop();


    /**
     * 返回栈顶元素，不弹出
     * @return 栈非空返回栈顶元素，栈为空返回null
     */
    E peek();

    /**
     * 判断是否为空
     * @return  空返回true，否则false
     */
    boolean isEmpty();

    /**
     * 判断栈是否已满
     * @return 满返回true，否则false
     */
    boolean isFull();
}
